package chapter1.classTest.task.superMarket;
/*
一商场(有名称，地址等信息)的会员系统中，有多个会员，用对象数组表示，假设为100个，
会员属性有会员号，姓名，手机号，积分，

1：添加新会员开卡的方法（添加新会员，参数如何处理？）增加新会员方法中添加判断，添加新会员时限制会员号不能重复，如果重复，禁止添加。
 方法申明如下：public boolean add(Member people)

2: 尝试加方法：给某一用户涨分的方法。
 方法声明如右： boolean inc(String cardNo,int fen)：如果帐号不存在，返回false

3：定义兑换礼品的方法
  假设
     1：100分兑换餐巾纸一包；
     2：400分兑换剃须刀一把；
     3：1000分兑换炒锅一个；
 用户输入卡号和需要兑换的奖品，兑换成功后扣除相应积分(礼品类不需要定义，用String返回即可)；如果帐号不存在，或者积分不够，兑换失败(提示:如果兑换成功,需要扣除相应的积分)。
  如果不成功，返回null。声明如下：
   public String duihuan(String cardNo,int lipingleixing)

 4:在超市会员卡那题的基础上 ，实现如下的功能：
   1）把会员类按照封装的规则进行改动。限制新会员的积分不能超过600.
   2）新增会员卡的时候，如果已满（比如数组的大小是20，已经放了20），
   实现给数组扩容（提示:新建一个更大的数组，把原来的对象放入）
 */

import java.io.Serializable;

public class Supermarket implements Serializable {
    String name;
    String address;
    Member[] people = new Member[20];
    int count = 0;//会员人数

    public Supermarket() {
    }

    public Supermarket(String name, String address) {
        this.name = name;
        this.address = address;
    }

    //显示超市和会员信息
    public void show() {
        System.out.println("超市的名字是:" + name + ",地址是:" + address);
        System.out.println("超市会员信息为:");
        for (int i = 0; i < count; i++) {
            people[i].show();
        }
    }

    //添加新会员,且新会员的会员号不能与之前的会员号重复，否则不能添加
    public boolean add(Member newMember) {

        //非常好的设计思想，方法的参数传递设计得也非常巧妙
        if (chechCardNoRepeat(newMember.getCardNo())) {    //方法调用，新对象的会员卡号作为实参传给所调用方法的形参
            //新会员的会员号重复，不能添加
            System.out.println("会员号重复，不能添加");
            return false;
        }

        if (chechPhoneRepeat(newMember.getPhone())) {      //方法调用，新对象的手机号作为实参传给所调用方法的形参
            //新会员的手机号重复，不能添加
            System.out.println("手机号重复，不能添加");
            return false;
        }

        if (chechJifenMax(newMember.getJifen())) {
            //新会员的积分超过600，不能添加
            System.out.println("积分超过600，不能添加");
            return false;
        }

        //给数组扩容
        if (count >= people.length) {   //条件为:count == people.length就可以了，多写大于是为了防止意外
            Member[] people2 = new Member[people.length * 2];
            for (int i = 0; i < people.length; i++) {
                people2[i] = people[i];
            }
            people = people2;
        }
//        for (int i = 0; i < count; i++) {
//            if (people[i].cardNo.equals(newMember.cardNo)) {
//                System.out.println("会员号重复，不能添加");
//                return false;
//            }
//        }
        people[count++] = newMember;
        return true;
    }

    //判断新会员的会员号号是否重复
    public boolean chechCardNoRepeat(String cardNo) {
        for (int i = 0; i < count; i++) {
            if (people[i].getCardNo().equals(cardNo))
                return true;
        }
        return false;
    }

    //判断新会员的手机号是否重复
    public boolean chechPhoneRepeat(String phone) {
        for (int i = 0; i < count; i++) {
            if (people[i].getPhone().equals(phone))
                return true;
        }
        return false;
    }

    //限制新会员的积分不能超过600
    public boolean chechJifenMax(int jifen) {
        if (jifen > 600) {
            return true;
        }
        return false;
    }

    //给指定会员号的用户涨分
    public boolean inc(String cardNo, int fen) {
        for (int i = 0; i < count; i++) {
            if (people[i].getCardNo().equals(cardNo)) {
                people[i].setJifen(people[i].getJifen() + fen);
                return true;
            }
        }
        return false;
    }

    //兑换礼品
    public String duiHuan(String cardNo, int lipingleixing) {
        for (int i = 0; i < count; i++) {
            if (people[i].getCardNo().equals(cardNo)) {
                if (lipingleixing == 1) {
                    if (people[i].getJifen() >= 100) {
                        people[i].setJifen(people[i].getJifen() - 100);
                        return "餐巾纸一包";
                    }
                } else if (lipingleixing == 2) {
                    if (people[i].getJifen() >= 400) {
                        people[i].setJifen(people[i].getJifen() - 400);
                        return "剃须刀一把";
                    }
                } else if (lipingleixing == 3) {
                    if (people[i].getJifen() >= 1000) {
                        people[i].setJifen(people[i].getJifen() - 1000);
                        return "炒锅一个";
                    }
                }
            }
        }
        return null;    //其它所有的情况，返回null，表示兑换失败
    }

    //获得超市会员人数
    public int getRenShu() {
        return count;
    }


    //获得最大积分的会员
    public Member getBiggestJifen() {   //要得到最大积分的会员，方法的返回类型是类，比起返回int型的积分数值，返回一个会员对象更好。
        if (count == 0)
            return null;

        Member maxJiFenPeople = people[0];
        for (int i = 1; i < count; i++) {
            if (people[i].getJifen() > maxJiFenPeople.getJifen())
                maxJiFenPeople = people[i];
        }
        return maxJiFenPeople;
    }


    //查询会员积分
    public int getJiFen(String cardNo){
        if (count == 0)
            return -1;
        for (int i = 0; i <count ; i++) {
            if (cardNo.equals(people[i].getCardNo()))
                return people[i].getJifen();
        }
        return -1;  //根据会员号，没找到会员
    }


}
